草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 在 C++ 中是否有 "generic"迭代器类型用于函数参数?

我有一个包含std::list的C++类作为成员(member)。现在我想添加一个方法,可用于将另一个容器的值插入到该列表中。像这样:templateclassBeliefSet{std::listm_List;voidSetFacts(???IterBegin,???IterEnd){m_List.insert(m_List.end(),IterBegin,IterEnd);}};现在我的问题是:我必须替换什么???with,以便它可以采用任何(或至少最常见的)std的迭代器容器,例如list,vector,ETC。?我用std::iterator试过了,但这似乎不起作用。请注意,这

c++ - 将虚拟方法作为接收迭代器的模板

我知道不能在C++中为虚方法使用模板(反之亦然),例如讨论here和here.不幸的是,我不确定在我的案例中如何处理该限制。我们有一个包含方法模板的类模板:templateclassBeliefSet:publicBelief{private:std::vectorm_Facts;public:templatevoidSetFacts(IterIterBegin,IterIterEnd,boolAppend=false){if(!Append){m_Facts.clear();}m_Facts.insert(m_Facts.end(),IterBegin,IterEnd);}};Set

c++ - 从不同类型容器的迭代器初始化 vector

给出以下代码:#include#includeintmain(){chararr[3]={1,2,3};std::vectorvec={1,2,3};std::vectorvec_one(std::begin(arr),std::end(arr));std::vectorvec_two(vec.begin(),vec.end());}vec_o​​ne和vec_two的初始化是未定义的、实现定义的还是根据正常类型转换规则定义的?如果交换char和int类型会怎样? 最佳答案 它们都很好,遵循将char转换为int(所以不用担心)和i

c++ nlohmann json - 如何迭代/查找嵌套对象

我正在尝试使用nlohmann::json遍历嵌套的json。我的json对象如下:{"one":1,"two":2"three":{"three.one":3.1},}我正在尝试迭代和/或查找嵌套对象。但是,似乎没有默认支持它。看来我必须通过创建另一个循环来遍历每个子对象,或者为每个子对象递归调用fn。我的以下代码及其结果表明,只有顶层迭代是可能的。voidfindNPrintKey(jsonsrc,conststd::string&key){autoresult=src.find(key);if(result!=src.end()){std::cout和输出:ravindrnath

c++ - 作为返回值的 STL 迭代器

我有A类,其中包含std::vector,我想从A类外部访问vector。我首先想到的是创建一个将迭代器返回给vector的get函数,但是遍历vector我将需要两个迭代器(开始和结束)。我想知道有什么方法(技术或模式)可以只用一个迭代器迭代整个vector吗?或者也许是其他一些访问vector的方法,当然不使用vector作为返回值:) 最佳答案 为什么不在您的类中同时添加一个begin()和end()函数,只需returnv.begin();和returnv.end();?(假设v是您的vector。)classMyVecto

c++ - 将空范围(相同的迭代器)传递给 STL 算法是否会导致定义的行为?

考虑以下几点:std::vectorvec(1);//vectorhasoneelementstd::fill(vec.begin(),vec.begin(),42);std::fill(vec.begin()+1,vec.end(),43);std::fill(vec.end(),vec.end(),44);上面所有的std::fill用法都会导致定义的行为吗?我能保证vec将保持不变吗?我倾向于认为"is",但我想确保标准允许这种用法。 最佳答案 不,如果不会导致未定义的行为。该标准在24.1/7中定义了空迭代器范围,并且没有任

c++ - 迭代 std::map<X,std::vector<Y>> 并对 vector 进行排序

遍历std::map>时,我可以对vector进行排序,还是可以使迭代器无效?也就是说,下面的代码可以吗?typedefstd::map>Map;Mapm;for(Map::iteratorit=m.begin();it!=m.end();++it){std::sort(it->second.begin(),it->second.end());} 最佳答案 您的代码没问题。map中的迭代器只有在您从map中删除元素时才会失效。修改STL容器的元素永远不会使该容器的迭代器失效,只会对容器本身进行操作,例如删除或有时添加元素。

c++ - 按照预期的方式使用迭代器、ifstream、ofstream

我有一个包含一堆单词的txt文件,每行一个。我需要阅读这个文件并将每个单词放在一个列表中然后用户将能够修改此列表完成编辑后,程序会将修改后的列表写入新文件。由于它是面向对象的C++,我将有两个类,一个用于读取/写入文件,一个用于编辑/修改列表和用户。考虑到这种方法,这是我在第一个类中的阅读功能:boolFileMgr::readToList(list&l){if(!input.is_open())returnfalse;stringline;while(!input.eof()){getline(input,line);l.push_back(line);}returntrue;}请记

c++ - 使用带嵌套 vector 的迭代器的意外行为

此示例程序获取一个迭代器,该迭代器指向包含在另一个vector中的一个vector的元素。我将另一个元素添加到包含vector中,然后打印出先前获得的迭代器的值:#include#includeintmain(intargc,charconst*argv[]){std::vector>foo(3,std::vector(3,1));std::vector::iteratorfoo_it=foo[0].begin();std::cout(3,2));std::cout由于对应于foo_it的vector没有被修改,我希望迭代器仍然有效。但是,当我运行此代码时,我得到以下输出(也在ideo

C++ STL vector 迭代器与索引访问和线程安全

我正在迭代一个STLvector并从中读取值。还有另一个线程可以更改此vector。现在,如果另一个线程从vector中插入或删除元素,它会使迭代器无效。不使用涉及的锁。我选择通过索引(方法1)代替迭代器(方法2)访问容器是否使其线程安全?性能怎么样?structA{inti;intj;};方法一:size_ts=v.size();//vcontainspointerstoobjectsoftypeAfor(size_ti=0;ii++;}方法二:std::vector::iteratorbegin=v.begin();std::vector::iteratorend=v.end();